package br.ucb.ucblive.recursos;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.application.Application;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;

import br.ucb.ucblive.HIB.MensagemUsuarioHIB;
import br.ucb.ucblive.beans.Curso;
import br.ucb.ucblive.beans.Disciplina;
import br.ucb.ucblive.beans.Mensagem;
import br.ucb.ucblive.beans.MensagemUsuario;
import br.ucb.ucblive.beans.MensagemUsuarioPK;
import br.ucb.ucblive.beans.Postagem;
import br.ucb.ucblive.beans.Usuario;

public final class Functions {

	private Functions(){}
	
	public static boolean mensagemIsLida(Usuario usuario, Mensagem mensagem){
		MensagemUsuarioHIB muHIB = new MensagemUsuarioHIB();
		MensagemUsuarioPK id = new MensagemUsuarioPK();
		MensagemUsuario mensagemUsuario = new MensagemUsuario();
		
		id.setUsuario(usuario);
		id.setMensagem(mensagem);
		mensagemUsuario = muHIB.consultar(id);
		if(mensagemUsuario.getStatus()==0)
			return true;
		return false;
	}
	
	public static String tituloMensagem(String titulo){
		if(titulo.length()>30){
			StringBuilder novoTitulo = new StringBuilder(33);
			for(int i=0; i<30; i++)
				novoTitulo.insert(i, titulo.charAt(i));
			novoTitulo.append("...");
			
			titulo = new String(novoTitulo);
			return titulo;
		}
		return titulo;
	}
	
	public static boolean cursoHasDisciplina(Curso curso, Disciplina disciplina){
		if(curso.getDisciplinaCurso().contains(disciplina))
			return true;
		return false;
	}
	
	/**   Esse trecho de código serve para atualizar a página atual do JSF.
	 * 	
	 */
	public static void atualizarPagina(){
		FacesContext context = FacesContext.getCurrentInstance();
		String viewId = context.getViewRoot().getViewId();
		ViewHandler handler = context.getApplication().getViewHandler();
		UIViewRoot root = handler.createView(context, viewId);
		root.setViewId(viewId);
		context.setViewRoot(root);
	}
	
    public static void refresh() {  
        FacesContext context = FacesContext.getCurrentInstance();  
        Application application = context.getApplication();  
        ViewHandler viewHandler = application.getViewHandler();  
        UIViewRoot viewRoot = viewHandler.createView(context, context.getViewRoot().getViewId());  
        context.setViewRoot(viewRoot);  
        context.renderResponse();  
    }  
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static List postagensAnteriores(Postagem postagem){
		List postagens = new ArrayList();
		while(postagem.getIdPostagemPai() != null){
			postagens.add(postagem.getIdPostagemPai());
			postagem = postagem.getIdPostagemPai();
		}
		return postagens;
	}
	
	
	/** Adiciona dias a hora do sistema
	 *  Return Date*/	
	public static Date adicionarDiasData(int dias){
		Calendar c = Calendar.getInstance();  
        c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE),
        		c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),c.get(Calendar.SECOND));  
        c.set(Calendar.DATE,c.get(Calendar.DATE)+dias);
        return c.getTime();
  
	}
	
	/** Subtrai dias da hora de Acesso enviada
	 *  Return Date*/	
	@SuppressWarnings("deprecation")
	public static Date subtrairDiasData(Date data, int dias){
		Calendar c = Calendar.getInstance();
        c.set(data.getYear(),data.getMonth(),data.getDate(),
        		data.getHours(),data.getMinutes(),data.getSeconds());  
        c.set(Calendar.DATE,c.get(Calendar.DATE)-dias);
        return c.getTime();
  
	}
	
	
	public static boolean podeEditarPostagem(Usuario usuario, Postagem postagem){
		if(usuario.getLogin().equals(postagem.getUsuario().getLogin()))
			return true;
		return false;
	}
	
	public static boolean podeExcluirPostagem(Usuario usuario, Postagem postagem){
		if(usuario.getTipo()==1 || usuario.getTipo()==2 || usuario.getLogin().equals(postagem.getUsuario().getLogin()))
			return true;
		return false;
	}
}
